﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace 文件
{
    class Program
    {
        static void Main(string[] args)
        {

            // testPath();

            // 文件操作中对路径进行操作的类，Path的使用
            // testPath2();

            // testFile();
            // testFileStream();
            // testFileStream2();

            // string videoPath = @"H:\迅雷下载\阳光电影www.ygdy8.com.大腕.BD.1080p.国语中字.mkv";
            // string videoNewPath = @"H:\迅雷下载\阳光电影www.ygdy8.com.大腕.BD.1080p.国语中字1.mkv";
            // copyFile(videoPath, videoNewPath);

            testFileReadAndWriter();
            // Console.WriteLine("Hello World!");

            Console.ReadKey();
        }

        private static void testFileReadAndWriter()
        {
            using (StreamReader reader = new StreamReader(@"d:/a1.txt"))
            {
                while (!reader.EndOfStream)
                {
                    string? content = reader.ReadLine();
                    Console.WriteLine(content);
                }
            }

            // using (StreamWriter writer = new StreamWriter(@"d:/a1.txt",true,Encoding.UTF8))
            // {
            //     writer.WriteLine("用writer写一行数据,并且不覆盖");
            // }
        }

        private static void copyFile(string source, string targer)
        {
            byte[] bytsize = new byte[1024 * 1024 * 5];       
            //创建读取流
            using (FileStream fsread=new FileStream(source,FileMode.Open,FileAccess.Read))
            {
                //创建写入流
                using (FileStream fswrite=new FileStream(targer,FileMode.OpenOrCreate,FileAccess.Write))
                {
                    while (true)
                    {
                        //返回实际读取到的字节
                        int r = fsread.Read(bytsize, 0, bytsize.Length);
                        //当字节位0的时候 证明已经读取结束
                        if(r==0){
                            break;
                        }
                        fswrite.Write(bytsize,0,r);
                    }
                }
            }
        }

        private static void testFileStream2()
        {
            // 自动的关闭流对象
            using (FileStream fileStream = new FileStream(@"d:/a1.txt",FileMode.Append,FileAccess.Write))
            {
                string content = "\r\n我要写入的内容";
                byte[] bytes = Encoding.UTF8.GetBytes(content);
                fileStream.Write(bytes);
            }
        }

        /// <summary>
        /// 文件流的操作
        /// </summary>
        /// <exception cref="NotImplementedException"></exception>
        private static void testFileStream()
        {
            // FileStream
            // FileStream fileStream = new FileStream(@"d:/a1.txt",FileMode.Append);
            // 1，创建文件流对象
            // FileStream fileStream = new FileStream(@"d:/a1.txt", // 文件路径
            //     FileMode.OpenOrCreate,// 怎么操作文件
            //     FileAccess.Read);// 怎么操作内容
            // // byte[] buffer = new byte[1024*1024*5];// 5M
            // byte[] buffer = new byte[1024];// 1024K
            // // 读取，限制每次最多读取5M
            // // 2，读取文件的内容到缓存区
            // int size = fileStream.Read(buffer,0,buffer.Length); // 返回实际读取到的字节数
            // Console.WriteLine(size);
            // string content = Encoding.UTF8.GetString(buffer,0,size);
            // Console.WriteLine(content);
            // // 3，关闭文件流
            // fileStream.Close();
            
            // 不一次性的读取数据，循环的读取数据
            byte[] buffer = new byte[1024];// 10K
            using (FileStream fileStream = new FileStream(@"d:/a1.txt",FileMode.OpenOrCreate,FileAccess.Read))
            {
                while (true)
                { 
                    int size = fileStream.Read(buffer,0,buffer.Length);
                    if (size != 0)
                    {
                        string content = Encoding.UTF8.GetString(buffer,0,size);
                        Console.Write(content);
                    }
                    else
                    {
                        break;
                    }
                }
            }
        }

        private static void testFile()
        {
            // 创建文件
          // FileStream fileStream = File.Create("d:/a.dat");
          // if (fileStream != null)
          // {
          //     Console.WriteLine("文件创建成功");
          // }
          
          // 删除文件
          // File.Delete(@"d:/a.dat");
          
          // 复制文件
          // File.Copy("d:/a.txt","d:/a1.txt");
          
          // 剪切
          // File.Move("d:/a.txt","h:/x.txt");
          
          // 判断文件是否存在
          bool exists = File.Exists("d:/a1.txt");
          if (exists)
          {
              Console.WriteLine("文件存在");

              // 读取文本文件
              // IEnumerable<string> lines = File.ReadLines(@"d:/a1.txt");
              // foreach (string line in lines)
              // {
              //     Console.WriteLine(line);
              // }

             // string text = File.ReadAllText(@"d:/a1.txt");
             // Console.WriteLine(text);

             // string[] readAllLines = File.ReadAllLines(@"d:/a1.txt");
             // foreach (string line in readAllLines)
             // {
             //     Console.WriteLine(line);
             // }

             // 读取字节文件
             // byte[] bytes = File.ReadAllBytes(@"d:/a1.txt");
             // Console.WriteLine(bytes.Length);
             // // Encoding.UTF8;
             //
             // string content = Encoding.UTF8.GetString(bytes);
             // Console.WriteLine(content);

             // 创建一个输出流
             // StreamWriter sw = File.AppendText(@"d:/a1.txt");
             // sw.AutoFlush = true;
             // sw.WriteLine("新增加一行");
             // sw.Close();
             
             File.AppendAllText(@"d:/a1.txt","在增加一行");


          }
          else
          {
              Console.WriteLine("文件不存在");
          }
          
          
          
        }

        private static void testPath2()
        {
            string str = @"c://a/b/c.txt";
            string fileName = Path.GetFileName(str);
            Console.WriteLine(fileName); // 文件名，带后缀
            string extension = Path.GetExtension(str);
            Console.WriteLine(extension); // .txt 后缀带点
            var directoryName = Path.GetDirectoryName(str);
            Console.WriteLine(directoryName); // 文件名之前的全路径
            var fullPath = Path.GetFullPath(str);
            Console.WriteLine(fullPath);// 文件的据对路径
            var pathRoot = Path.GetPathRoot(str);
            Console.WriteLine(pathRoot);// 返回时那个盘符
            var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(str);
            Console.WriteLine(fileNameWithoutExtension); // 文件名，没有后缀
            var combine = Path.Combine("c:/x/y", "rrr.txt"); // 拼接两个路径
            Console.WriteLine(combine);
        }

        private static void testPath()
        {
            string str = "c://a/b/c.txt";
            int index = str.LastIndexOf("/");
            str = str.Substring(index+1);
            Console.WriteLine(str);
            
            
        }
    }
}